package zisu.netty.practice.netty.inBoundAndOutBound;

import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.util.CharsetUtil;

import java.nio.charset.Charset;

/**
 * @Desc: ""
 * @Author: caixiang
 * @DATE: 2020/7/29 11:40
 */
public class MyClientHandler extends SimpleChannelInboundHandler<Long> {
    @Override
    protected void channelRead0(ChannelHandlerContext ctx, Long msg) throws Exception {
        System.out.println("client-MyClientHandler-channelRead0 服务器的ip=" + ctx.channel().remoteAddress()+"收到服务器消息=" + msg);

    }

    //重写 channelActive 发送数据

    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        System.out.println("MyClientHandler 发送数据");
        ctx.writeAndFlush(123456L); //发送的是一个Long
        //分析：1 “asdjwioqjdioqjwd”是16个字节  所有enCoder和hander处理类会自动调用两次 long为8个字节 所以会调用两次，并且会把这个字符串转为long类型
        //     2. 该处理器的前一个handler是，MyLongToByteEncoder
        //     3. MyLongToByteEncoder 父类是 MessageToByteEncoder
        //总结：要注意传入的数据类型 和server端接受的数据类型要一致，否则会依据编发防止转为2进制 然后强行转换。
        ctx.writeAndFlush(Unpooled.copiedBuffer("asdjwioqjdioqjwd", CharsetUtil.UTF_8));
    }
}
